#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QPainter>
#include <QDebug>
#include <QTimer>
#include <QVector>
#include <QKeyEvent>
#include <QLabel>
#include <QPushButton>
#include "pipechannel.h"
#include "globalutils.h"
class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = nullptr);
    ~MainWindow()override;
    /**
     * 复写绘制函数
     * @brief paintEvent
     * @param event
     */
    void paintEvent(QPaintEvent *event)override;
    /**
     * @brief keyPressEvent
     * @param event
     * 键盘按下事件
     */
    void keyPressEvent(QKeyEvent *event)override;
    /**
      * @brief mousePressEvent
      * @param event
      * 鼠标点击事件
      */
     void mousePressEvent(QMouseEvent * event)override;
    /**
     * @brief init
     * 初始化
     */
    void init();

    /**
     * @brief initGame
     * 初始化游戏相关
     */
    void initGame();
    /**
     * @brief initSpeed
     * 初始化速度
     */
    void initSpeed();
    /**
     * @brief startGame
     * 开始游戏
     */
    void startGame();
    /**
     * @brief stopGame
     * 停止游戏
     */
    void stopGame();
    /**
     * @brief drawBack
     * 绘制背景
     */
    void drawBack();
    /**
     * @brief drawBack
     * 绘制bird
     */
    void drawBird();

    /**
     * @brief drawPipe
     * 绘制管道
     */
    void drawPipe();

    /**
     * @brief isCrush 是否碰撞
     * @return
     */
    bool isCrush();
public slots:
    /**
     * @brief loopPaint
     * 循环绘制（定时器）
     */
    void loopPaint();

    /**
     * @brief slotStartGame
     */
    void slotStartGame();
private:
    QPixmap background; //背景图
    QPixmap  ground; //地面
    QPixmap bird1; //小鸟
    QPixmap bird2;
    QPixmap bird3;

    int birdNo = 1;
    int birdNoMax = 15;
    int birdY = 0; // 小鸟的位置Y坐标
    int birdX = 0; // 小鸟的位置X坐标
    QMatrix matrix;
    enum GameStatus{STOPING = 1, RUNNING}; //游戏状态枚举
    enum BirdStatus{DEFAULT, UP, DOWN}; //小鸟飞行状态枚举
    GameStatus gameStatus = GameStatus::STOPING; //游戏状态 默认停止
    BirdStatus birdStatus = BirdStatus::DOWN;
    double birdDownSpeed = 0;
    double birdUpSpeed = 2.0;
    QTimer *timer = nullptr;
    QVector<int> * v = nullptr;
    int groundSize = 0; //地面个数
    int moveSpeed = 2; //移动速度
    QVector<PipeChannel*> * pipeChannels = nullptr;

    int score = 0;
    QLabel* scoreLabel  = nullptr; //记录分数

    QPushButton* startButton = nullptr;


};

#endif // MAINWINDOW_H
